package Presentation;

import Metier.Controleurs.GestionCuisson;
import Metier.Controleurs.GestionStock;
import Metier.Objets.LotCuisson;
import Metier.Objets.Produit;
import javax.swing.table.TableModel;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.List;
import java.util.ResourceBundle;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListModel;
import javax.swing.SwingUtilities;

public class ThreadRafraichissementCuisson extends Thread {

    private final OngletCuisson onglet;
    private final GestionCuisson gCuisson;
    private final GestionStock gStock;
    private final ResourceBundle cuissonBundle;

    public ThreadRafraichissementCuisson(OngletCuisson onglet) {
        super();
        this.onglet = onglet;
        this.gCuisson = new GestionCuisson(onglet);
        this.gStock = new GestionStock(onglet);
        this.cuissonBundle = ResourceBundle.getBundle("ressources/Cuisson/Cuisson", onglet.getFP().getLocale());
    }

    @Override
    public void run() {
        TableModel tm = gCuisson.getAlertes(onglet.getTableAlertes().getModel());
        ListModel lm = gCuisson.getContenuListPrincipale();
        List<LotCuisson> listCuissonsEnCours = gCuisson.getCuissonsEnCours();
        HashMap<Produit, String> hashStock = new HashMap<>();
        for (int i = 0; i < onglet.getListePrincipale().getModel().getSize(); i++) {
            Produit p = (Produit)onglet.getListePrincipale().getModel().getElementAt(i);
            hashStock.put(p, String.valueOf(this.gStock.sommeQuantites(this.gStock.getStock(p))));
        }
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Action supprCuisson = new AbstractAction() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int choice = JOptionPane.showConfirmDialog(onglet.getFP(),
                                cuissonBundle.getString("cuisson.confirmationjeter"),
                                cuissonBundle.getString("cuisson.confirmation"),
                                JOptionPane.YES_NO_OPTION);
                        if (choice == JOptionPane.YES_OPTION) {
                            int row = ((JTable) e.getSource()).getSelectedRow();
                            gCuisson.supprimerCuisson(Integer.valueOf(onglet.getTableCuissonsModel().getValueAt(row, 5).toString()));
                            onglet.rafraichir();
                        }
                    }
                };
                ButtonColumn buttonColumn = new ButtonColumn(onglet.getTblGeneral(), supprCuisson, 4);
                buttonColumn.setMnemonic(KeyEvent.VK_D);
                onglet.setAlertes(tm);
                onglet.setListProduit(lm);
                onglet.getListeCuissons().updateList(listCuissonsEnCours);
                onglet.setHashStock(hashStock);
                onglet.remplirTuiles((Produit) onglet.getListePrincipale().getSelectedValue());
            }
        });
    }
}
